home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib11.dsk / APPLE RECIPE BOX.bas < prev    next >
BASIC Source File  |  2023-02-26  |  20KB  |  446 lines

  1. 1  REM  **********************
  2. 2  REM  * THE RECIPE BOX     *
  3. 3  REM  * BY JAN COSTENBADER *
  4. 4  REM  * COPYRIGHT (C) 1982 *
  5. 5  REM  * BY MICRO-SPARC INC *
  6. 6  REM  * LINCOLN, MA. 01773 *
  7. 7  REM  **********************
  8. 10 CV$ = "A": REM  10.26.84
  9. 20  GOTO 9000
  10. 30  PRINT : PRINT CL$: PRINT D$;"PR#0": POKE 34,0: HOME : PRINT  TAB( 15);"RECIPE BOX": FOR X = 1 TO 40: PRINT "=";: NEXT : PRINT :PR = 0
  11. 40  POKE 32,4: PRINT : PRINT "1=ENTER A NEW RECIPE": PRINT "2=CHANGE A RECIPE ": PRINT "3=PRINT INDEX OF RECIPES"
  12. 50  PRINT "4=PRINT A RECIPE": PRINT "5=EXIT SYSTEM"
  13. 60  POKE 32,0: VTAB 16:PM$ = "FUNCTION CHOICE:  ":UL = 5: GOSUB 300
  14. 70  ON CH GOTO 1000,2000,3000,4000,5000
  15. 75 ND = 0:CK = 1
  16. 80 CK$ =  MID$ (I$,CK,1): IF CK$ <"0"  OR CK$ >"9"  THEN 90
  17. 85 CK = CK +1:ND = ND +1: GOTO 80
  18. 90  IF ND >3  THEN  CALL BL: PRINT "IT LOOKS AS IF YOU'RE FEEDING AN ARMY": PRINT "USE A QUANTITY LESS THAN 1000": PRINT 
  19. 95  RETURN 
  20. 100  HOME : VTAB VT: HTAB 1:CL = 1:NW% = 1:LS(1) = 1
  21. 102  GET J$(CL)
  22. 104  IF J$(CL) =  CHR$(8)  AND NW% = 1  AND CL = 1  THEN 102
  23. 106  IF J$(CL) < > CHR$(8)  THEN 114
  24. 108  IF CL >1  THEN  PRINT  CHR$(8);:CL = CL -1: GOTO 102
  25. 110  IF NW% >1  THEN NW% = NW% -1:VT = VT -1:CL = LS(NW%): VTAB VT: HTAB CL
  26. 112  GOTO 102
  27. 114  IF J$(CL) =  CHR$(13)  THEN LS(NW%) = CL: GOTO 134
  28. 116  IF  ASC(J$(CL)) <32  THEN 102
  29. 118  PRINT J$(CL);: IF J$(CL) =  CHR$(32)  THEN LS(NW%) = CL
  30. 120 CL = CL +1: IF CL <40  THEN 102
  31. 122  HTAB LS(NW%): CALL  -868:VT = VT +1: VTAB VT: HTAB 1
  32. 124  IF NW% = 16  THEN 134
  33. 126  FOR X = LS(NW%) +1 TO 40: PRINT J$(X);: NEXT 
  34. 128 CL = X -LS(NW%) -1:NW% = NW% +1:LS(NW%) = 1
  35. 130  IF NW% = 16  THEN  CALL BL: INVERSE : FLASH : HTAB 10: PRINT "LAST LINE";: NORMAL : HTAB 1
  36. 132  GOTO 102
  37. 134  PRINT : PRINT : HTAB 5: PRINT "ONE MOMENT PLEASE"
  38. 136 LI = VT -NW% -1: FOR X = 1 TO NW%:WD$(X) = "": FOR X1 = 1 TO LS(X)
  39. 138 J =  PEEK(L%(LI +X) +X1 -1):J$ =  CHR$(J -128)
  40. 140 WD$(X) = WD$(X) +J$: NEXT : NEXT 
  41. 142  RETURN 
  42. 150 I = 0: CALL BL
  43. 152  REM  : STANDARD DATA ENTRY
  44. 154  IF I <0  THEN I = 0
  45. 156  IF NC <6 GOTO 160
  46. 158  IF I >NC -5  THEN  CALL BL
  47. 160  GET J$(I)
  48. 162  IF J$(I) =  CHR$(27)  THEN  POP : GOTO 30
  49. 164  IF J$(I) =  CHR$(13)  THEN I = I -1: GOTO 178
  50. 166  IF J$(I) =  CHR$(21)  THEN 160
  51. 168  IF J$(I) =  CHR$(8)  AND I = 0  THEN  PRINT "";: GOTO 154
  52. 170  IF J$(I) =  CHR$(8)  THEN  PRINT J$(I);:I = I -1: GOTO 154
  53. 172  IF  ASC(J$(I)) <32  THEN  GOTO 160
  54. 174  IF NC = I  THEN  PRINT "";: GOTO 160
  55. 176  PRINT J$(I);:I = I +1: GOTO 154
  56. 178  PRINT : PRINT :I$ = "": FOR J = 0 TO I:I$ = I$ +J$(J): NEXT : RETURN 
  57. 200  POKE 34,0: HOME :TB = 20 *(PR +1) - INT( LEN(TL$)/2): IF TB >0  THEN  PRINT  TAB( TB);
  58. 205  PRINT TL$
  59. 210  FOR X = 1 TO 40 *(PR +1): PRINT "=";: NEXT : PRINT : IF PR = 0  THEN  POKE 34,3
  60. 215  RETURN 
  61. 225  POKE 34,0: HOME :TB = 20 *(PR +1) - INT( LEN(TL$)/2): IF TB >0  THEN  PRINT  TAB( TB);
  62. 230  PRINT TL$
  63. 235 TB = 20 *(PR +1) - INT( LEN(T1$)/2): IF TB >0  THEN  PRINT  TAB( TB);
  64. 240  PRINT T1$
  65. 245  FOR X = 1 TO 40 *(PR +1): PRINT "=";: NEXT : PRINT : IF PR = 0  THEN  POKE 34,4
  66. 250  RETURN 
  67. 300  PRINT PM$;
  68. 305  GET CH$: IF CH$ =  CHR$(27)  THEN  POP : GOTO 30
  69. 310 CH =  VAL(CH$): IF CH <1  OR CH >UL  THEN 305
  70. 315  PRINT : RETURN 
  71. 325  PRINT D$;"PR#";PR: PRINT  CHR$(29)
  72. 330  IF PR >0  THEN  PRINT  CHR$(9);"80N"
  73. 335  RETURN 
  74. 350  VTAB 22: HTAB 1: PRINT "HIT 'RETURN' TO CONTINUE...";: GOTO 360
  75. 355  VTAB 22: PRINT "HIT 'RETURN' FOR MORE...";
  76. 360  GET CH$: IF CH$ =  CHR$(27)  THEN  POP : GOTO 30
  77. 365  IF  ASC(CH$) < >13  THEN 360
  78. 370  PRINT : HOME :C = 0: RETURN 
  79. 375  HOME : PRINT  TAB( 13);"OUTPUT CHOICES": PRINT : PRINT "     1=OUTPUT TO SCREEN": PRINT "     2=OUTPUT TO PRINTER"
  80. 380  VTAB 15:PM$ = "OUTPUT CHOICE: ":UL = 2: GOSUB 300
  81. 385 PR = CH -1: RETURN 
  82. 410  HOME : VTAB 8: PRINT " THERE ARE NO RECIPES IN THE FILE": GOSUB 350: RETURN 
  83. 420  HOME : VTAB 8: PRINT "THAT PAGE NUMBER IN NOT IN COMPUTER": GOSUB 350: RETURN 
  84. 450  PRINT OP$;IX$;L$
  85. 460  PRINT WR$;IX$;",R";PN: PRINT TR%(PN): PRINT NR$(PN)
  86. 470  PRINT NS%: PRINT PI%: PRINT PP%
  87. 480  PRINT CL$: RETURN 
  88. 500  PRINT OP$;IX$;L$
  89. 510  PRINT WR$;IX$;",R0"
  90. 515  IF N = 0  THEN N = 1
  91. 520  PRINT N: PRINT NX%
  92. 530  PRINT CL$;IX$: RETURN 
  93. 550  PRINT OP$;IX$;L$
  94. 560  PRINT RD$;IX$;",R0"
  95. 570  INPUT N: INPUT NX%
  96. 580  PRINT CL$;IX$
  97. 590  RETURN 
  98. 600  PRINT OP$;RF$;LF$
  99. 602  PRINT OP$;RO$;LO$
  100. 604  PRINT RD$;RO$;",R0"
  101. 606  INPUT RN:NR = NX%:PI% = NX%
  102. 608  FOR X = 1 TO NI%:OP = NR
  103. 610  IF RN = 0  THEN NR = OP +1: GOTO 624
  104. 612  PRINT RD$;RO$;",R";RN
  105. 614  INPUT OP:RN = RN -1: IF X = 1  THEN PI% = OP
  106. 616  IF X = NI%  THEN NR = 0: GOTO 626
  107. 618  IF RN = 0  THEN NR = NX%: GOTO 626
  108. 620  PRINT RD$;RO$;",R";RN
  109. 622  INPUT NR
  110. 624  IF X = NI%  THEN NR = 0
  111. 626  PRINT WR$;RF$;",R";OP
  112. 628  PRINT NR
  113. 630  PRINT IG$(X): NEXT 
  114. 632  PRINT WR$;RO$;",R0"
  115. 634  PRINT RN
  116. 636  PRINT CL$
  117. 638  IF OP > = NX%  THEN NX% = OP +1
  118. 640  RETURN 
  119. 650  PRINT OP$;RF$;LF$
  120. 652  PRINT OP$;RO$;LO$
  121. 654  PRINT RD$;RO$;",R0"
  122. 656  INPUT RN:NR = NX%:PP% = NX%
  123. 658  FOR X = 1 TO NW%:OP = NR
  124. 660  IF RN = 0  THEN NR = OP +1: GOTO 674
  125. 662  PRINT RD$;RO$;",R";RN
  126. 664  INPUT OP:RN = RN -1: IF X = 1  THEN PP% = OP
  127. 666  IF X = NW%  THEN NR = 0: GOTO 676
  128. 668  IF RN = 0  THEN NR = NX%: GOTO 676
  129. 670  PRINT RD$;RO$;",R";RN
  130. 672  INPUT NR
  131. 674  IF X = NW%  THEN NR = 0
  132. 676  PRINT WR$;RF$;",R";OP
  133. 678  PRINT NR
  134. 680  PRINT WD$(X): NEXT 
  135. 682  PRINT WR$;RO$;",R0"
  136. 684  PRINT RN
  137. 686  PRINT CL$
  138. 688  IF OP > = NX%  THEN NX% = OP +1
  139. 690  RETURN 
  140. 700  PRINT OP$;IX$;L$
  141. 710  PRINT RD$;IX$;",R";PN
  142. 720  INPUT TR%(PN): CALL 800:NR$(PN) =  MID$ (CV$,1)
  143. 730  INPUT NS%: INPUT PI%: INPUT PP%
  144. 740  PRINT CL$;IX$: RETURN 
  145. 800  PRINT OP$;RF$;LF$:NI% = 1:RN = PI%
  146. 805  PRINT RD$;RF$;",R";RN
  147. 810 RI(NI%) = RN
  148. 815  INPUT RN: CALL 800:IG$(NI%) =  MID$ (CV$,1)
  149. 818  IF RN >10000  THEN A$ =  STR$(RN):RN =  ASC( RIGHT$(A$,4)) +1
  150. 820  IF RN  THEN NI% = NI% +1: GOTO 805
  151. 825  PRINT CL$;RF$: RETURN 
  152. 850  PRINT OP$;RF$;LF$:NW% = 1:RN = PP%
  153. 855  PRINT RD$;RF$;",R";RN
  154. 860 RD(NW%) = RN
  155. 865  INPUT RN: CALL 800:WD$(NW%) =  MID$ (CV$,1)
  156. 870  IF RN  THEN NW% = NW% +1: GOTO 855
  157. 875  PRINT CL$;RF$: RETURN 
  158. 900  PRINT OP$;RO$;LO$
  159. 905  PRINT RD$;RO$;",R0"
  160. 910  INPUT RN
  161. 915  FOR X = 1 TO WS%
  162. 920  PRINT WR$;RO$;",R";X +RN
  163. 925  PRINT RD(X): NEXT 
  164. 930  PRINT WR$;RO$;",R0"
  165. 935  PRINT RN +WS%
  166. 940  PRINT CL$;RO$: RETURN 
  167. 950  PRINT OP$;RO$;LO$
  168. 955  PRINT RD$;RO$;",R0"
  169. 960  INPUT RN
  170. 965  FOR X = 1 TO N1%
  171. 970  PRINT WR$;RO$;",R";X +RN
  172. 975  PRINT RI(X): NEXT 
  173. 980  PRINT WR$;RO$;",R0"
  174. 985  PRINT RN +N1%
  175. 990  PRINT CL$;RO$: RETURN 
  176. 1000 TL$ = "ENTER RECIPES ": GOSUB 200
  177. 1010  PRINT : PRINT "WHAT IS NAME OF RECIPE  ": PRINT :NC = 40: VTAB 8: HTAB 1: PRINT  LEFT$(DT$,NC): HTAB 1: VTAB 8: GOSUB 150:NA$ = I$
  178. 1020 TL$ = NA$: GOSUB 200
  179. 1030  POKE 32,4: PRINT : FOR X = 1 TO NH: PRINT X;". ";HD$(X): NEXT : POKE 32,0: PRINT 
  180. 1040  HTAB 1: VTAB NH +7: CALL CS:PM$ = "WHAT TYPE ":UL = NH: GOSUB 300:T = CH
  181. 1050  HOME : PRINT "HOW MANY SERVINGS? ";:NC = 2: GOSUB 150:NS% =  VAL(I$)
  182. 1060  HOME : PRINT : PRINT "CATEGORY=";HD$(T): PRINT : PRINT "THIS WILL SERVE ";NS%
  183. 1070  PRINT : PRINT "IS THIS CORRECT? ";: GET I$: IF I$ < >"Y"  THEN 1000
  184. 1080 T1$ = "INGREDIENTS": GOSUB 225
  185. 1090 NI% = 1:NC = 35
  186. 1100  PRINT "ENTER INGREDIENTS ('RETURN' TO QUIT)": PRINT 
  187. 1110  PRINT NI%;") ";: HTAB 4: PRINT  LEFT$(DT$,NC): CALL  -998: HTAB 4: GOSUB 150: IF I$ =  CHR$(13) GOTO 1140
  188. 1120  GOSUB 75: IF ND >3  THEN 1110
  189. 1130 IG$(NI%) = I$:NI% = NI% +1:VT = VT +2: GOTO 1110
  190. 1140 NI% = NI% -1: HOME : IF NI% = 0  THEN 1090
  191. 1150  FOR X = 1 TO NI%: PRINT X;") ";IG$(X): NEXT 
  192. 1160  PRINT : PRINT "IS THIS CORRECT ";: GET I$: IF I$ = "Y"  THEN 1210
  193. 1170  PRINT : PRINT : PRINT "WHICH INGREDIENT IS INCORRECT ":CV =  PEEK(37):NC = 2: GOSUB 150:X =  VAL(I$): IF X <1  OR X >NI%  THEN  VTAB CV -1: CALL  -958: GOTO 1170
  194. 1180  HOME : PRINT "CHANGE:": PRINT : PRINT X;". ";IG$(X): PRINT : PRINT "TO: ": PRINT 
  195. 1190  PRINT X;". ";:NC = 35: GOSUB 150: GOSUB 75: IF ND >3  THEN 1190
  196. 1200 IG$(X) = I$: HOME : GOTO 1150
  197. 1210 T1$ = "PREPARATION INSTRUCTIONS": GOSUB 225
  198. 1220 HT = 1:VT = 5: POKE 34,4: GOSUB 100
  199. 1230  HOME : FOR X = 1 TO NW%: PRINT WD$(X): NEXT 
  200. 1240  VTAB 22: HTAB 1: PRINT "IF THIS IS CORRECT HIT 'RETURN'";: GET I$: IF I$ =  CHR$(13)  THEN  GOTO 1260
  201. 1250  GOTO 1220
  202. 1260  PRINT :PN = 0: FOR X = 1 TO N: IF TR%(X) = 0  THEN PN = X
  203. 1270  NEXT : IF PN = 0  THEN N = N +1:PN = N
  204. 1280 NR$(PN) = NA$:TR%(PN) = T: HOME : PRINT : PRINT "WRITING TO DISK": POKE 34,0
  205. 1290  GOSUB 600: GOSUB 650: GOSUB 450
  206. 1300  GOSUB 500
  207. 1310  GOTO 30
  208. 2000 TL$ = "CHANGE AN ENTRY": GOSUB 200
  209. 2005  IF N <1  THEN  GOSUB 410: GOTO 30
  210. 2010  IF I$ =  CHR$(27)  THEN 30
  211. 2015  VTAB 6: PRINT "WHAT PAGE NO. DO YOU WISH TO CHANGE? ";:NC = 3: GOSUB 150
  212. 2020 PN =  VAL(I$): IF PN = 0 GOTO 30
  213. 2025  IF PN >N  THEN  GOSUB 420: GOTO 2015
  214. 2030  IF PN = 0  THEN  GOTO 30
  215. 2035  GOSUB 700:TL$ = "CHANGE":T1$ = NR$(PN): GOSUB 225
  216. 2040  PRINT : PRINT " DO YOU WISH TO CHANGE": POKE 32,4: PRINT : PRINT "1. NAME OF RECIPE": PRINT "2. NUMBER OF SERVINGS": PRINT "3. CATEGORY"
  217. 2045  PRINT "4. INGREDIENTS": PRINT "5. PREPARATION INSTRUCTIONS"
  218. 2050  PRINT "6. DELETE RECIPE": PRINT : POKE 32,0
  219. 2055 PM$ = "WHICH: ":UL = 6: GOSUB 300:C1 = CH
  220. 2060  ON C1 GOTO 2100,2200,2300,2400,2800,2900
  221. 2100  HOME : PRINT "CHANGE NAME FROM: ": PRINT : PRINT "     ";NR$(PN)
  222. 2110  PRINT : PRINT "TO: ": PRINT : PRINT "     ";:NC = 40: GOSUB 150:NR$(PN) = I$
  223. 2120  HOME : PRINT "NAME: ";NR$(PN): PRINT "SERVES ";NS%: PRINT "CATEGORY=";HD$(TR%(PN))
  224. 2130  PRINT : PRINT : PRINT "IS THIS CORRECT?  ";: GET I$: IF I$ = "N"  THEN  GOTO 2060
  225. 2140  PRINT : GOSUB 450: GOTO 30
  226. 2200  HOME : PRINT "CHANGE NUMBER OF SERVINGS": PRINT : PRINT "     FROM:  ";NS%: PRINT 
  227. 2210  PRINT "     TO:  ";:NC = 2: GOSUB 150:NS% =  VAL(I$): GOTO 2120
  228. 2300  HOME : PRINT : FOR X = 1 TO NH: PRINT X;") ";HD$(X): NEXT : PRINT 
  229. 2310  PRINT "CHANGE HEADING FROM NO. ";TR%(PN): PRINT : PRINT "                 TO:  ";:UL = NH: GOSUB 305:TR%(PN) = CH
  230. 2320  GOTO 2120
  231. 2400  HOME : PRINT "DO YOU WISH TO ": PRINT "     1. CHANGE AN INGREDIENT": PRINT "     2. ADD AN INGREDIENT"
  232. 2410  PRINT :PM$ = "WHICH? ":UL = 2: GOSUB 300: GOSUB 800:N1% = NI%: IF CH = 2  THEN 2590
  233. 2420 C = 0
  234. 2430  HOME : FOR X = 1 TO NI%: PRINT X;". ";IG$(X):C = C +1: IF C >16  THEN  GOSUB 355
  235. 2440  NEXT 
  236. 2450  PRINT : PRINT "CHANGE WHICH INGREDIENT? ";:NC = 2: GOSUB 150:X =  VAL(I$)
  237. 2460  IF X <1  OR X >NI%  THEN 2450
  238. 2470  HOME : PRINT "CHANGE INGREDIENT ";X;" FROM: ": PRINT : PRINT IG$(X)
  239. 2480  PRINT "TO: ": PRINT :NC = 35: GOSUB 150: GOSUB 75: IF ND >3  THEN 2480
  240. 2490 IG$(X) = I$
  241. 2500 C = 0: HOME : FOR X = 1 TO NI%: PRINT X;") ";IG$(X):C = C +1: IF C >15  THEN  GOSUB 355
  242. 2510  NEXT 
  243. 2520  VTAB 22: PRINT "IS THIS CORRECT? ";: GET I$: PRINT : IF I$ < >"Y"  THEN 2430
  244. 2530  PRINT OP$;RF$;LF$:RI(NI% +1) = 0
  245. 2540  FOR X = 1 TO NI%
  246. 2550  PRINT WR$;RF$;",R";RI(X)
  247. 2560  PRINT RI(X +1)
  248. 2570  PRINT IG$(X): NEXT 
  249. 2580  PRINT CL$;RF$: GOTO 30
  250. 2590  HOME : PRINT "LAST INGREDIENT WAS:"
  251. 2600  PRINT NI%;") ";IG$(NI%): PRINT 
  252. 2610 NI% = NI% +1
  253. 2620  PRINT NI%;") ";:NC = 35: GOSUB 150: GOSUB 75: IF ND >3  THEN 2620
  254. 2630  IF I$ =  CHR$(13)  THEN 2650
  255. 2640 IG$(NI%) = I$: GOTO 2610
  256. 2650 NI% = NI% -1:C = 0: HOME 
  257. 2660  FOR X = 1 TO NI%: PRINT X;") ";IG$(X):C = C +1: IF C >15  THEN  GOSUB 355
  258. 2670  NEXT 
  259. 2680  VTAB 22: PRINT "IS THIS CORRECT? ";: GET I$: PRINT : IF I$ < >"Y"  THEN NI% = N1%: GOTO 2590
  260. 2690  GOSUB 950: GOSUB 600: GOSUB 450
  261. 2700  GOSUB 500: GOTO 30
  262. 2800  GOSUB 850
  263. 2810 TL$ = "REENTER PREPARATION INSTRUCTIONS"
  264. 2820 T1$ = NR$(PN): GOSUB 225
  265. 2830 HT = 1:VT = 5: GOSUB 100
  266. 2840  HOME : FOR X = 1 TO NW%: PRINT WD$(X): NEXT 
  267. 2850  VTAB 22: HTAB 1: PRINT "IF THIS IS CORRECT HIT 'RETURN' ";: GET I$: PRINT : IF I$ < > CHR$(13)  THEN  GOTO 2800
  268. 2860  GOSUB 900: GOSUB 650: GOSUB 450
  269. 2870  GOSUB 500
  270. 2880  GOTO 30
  271. 2900  HOME : PRINT : PRINT "ARE YOU SURE YOU WANT TO DELETE :": PRINT 
  272. 2910  PRINT NR$(PN);"....?";: GET I$
  273. 2920  PRINT I$: IF I$ < >"Y"  THEN  GOTO 2000
  274. 2930  GOSUB 800: GOSUB 850:N1% = NI%:WS% = NW%
  275. 2940  GOSUB 900: GOSUB 950
  276. 2950 NR$(PN) = "DELETED":NS% = 0:TR%(PN) = 0
  277. 2960  GOSUB 450: GOTO 30
  278. 3000 TL$ = "INDEX": GOSUB 200
  279. 3010  IF N <1  THEN  GOSUB 410: GOTO 30
  280. 3020  PRINT : PRINT "INDEX SELECTIONS": POKE 32,5: PRINT 
  281. 3030  PRINT "1= LIST ALL RECIPES BY PAGE NUMBER": PRINT "2= LIST RECIPES BY CATEGORY"
  282. 3040  PRINT "3= RETURN TO MAIN MENU": POKE 32,0: PRINT : PRINT 
  283. 3050 PM$ = "INDEX CHOICE: ":UL = 3: GOSUB 300:C1 = CH
  284. 3060  IF CH = 3  THEN 30
  285. 3070  ON C1 GOTO 3100,3400
  286. 3080 TL$ = "INDEX": GOSUB 200
  287. 3100  GOSUB 375: GOSUB 325: GOSUB 200:C = 0
  288. 3110  FOR PN = 1 TO N: IF TR%(PN) = 0  THEN 3190
  289. 3120  PRINT PN;" "; SPC( PN <10); SPC( PN <100); SPC( PN <1000);NR$(PN)
  290. 3130  IF PR >0  THEN 3190
  291. 3140 C = C +1: IF C <16  THEN 3190
  292. 3150  VTAB 22: PRINT "ENTER PAGE NUMBER DESIRED"
  293. 3160  VTAB 23: PRINT "OR HIT 'RETURN' FOR MORE: ";:NC = 3: GOSUB 150
  294. 3170  IF I$ < > CHR$(13)  THEN PN =  VAL(I$): GOTO 3220
  295. 3180 C = 0: HOME : PRINT 
  296. 3190  NEXT 
  297. 3200  IF PR >0  THEN 30
  298. 3210  PRINT : PRINT "PAGE NUMBER DESIRED:  ";:NC = 3: GOSUB 150
  299. 3220  GOSUB 4500
  300. 3230  GOTO 30
  301. 3400 TL$ = "CATEGORY INDEX": GOSUB 200:C = 0
  302. 3410  POKE 32,4: PRINT : FOR X = 1 TO NH: PRINT X;". ";HD$(X): NEXT : POKE 32,0: PRINT 
  303. 3420  HTAB 1: VTAB NH +7: CALL CS:PM$ = "WHICH HEADING:  ":UL = NH: GOSUB 300:T = CH
  304. 3430  GOSUB 375: GOSUB 325
  305. 3440 TL$ = HD$(T): GOSUB 200
  306. 3450  FOR PN = 1 TO N: IF TR%(PN) < >T  THEN  GOTO 3520
  307. 3460  PRINT PN;" "; SPC( PN <10); SPC( PN <100); SPC( PN <1000);NR$(PN): IF PR >0  THEN 3520
  308. 3470 C = C +1: IF C <16  THEN 3520
  309. 3480  VTAB 22: PRINT "ENTER PAGE NUMBER DESIRED"
  310. 3490  VTAB 23: PRINT "OR HIT 'RETURN' FOR MORE:  ";:NC = 3: GOSUB 150
  311. 3500  IF I$ < > CHR$(13)  THEN PN =  VAL(I$): GOTO 3560
  312. 3510 C = 0: HOME : PRINT 
  313. 3520  NEXT 
  314. 3530  IF PR >0  THEN 30
  315. 3540  IF C = 0  THEN  PRINT "THERE ARE NO RECIPES IN THIS CATEGORY": GOSUB 350: GOTO 30
  316. 3550  PRINT : PRINT "PAGE NUMBER DESIRED: ";:NC = 3: GOSUB 150
  317. 3560  GOSUB 4500
  318. 3570  GOTO 30
  319. 4000  HOME :TL$ = "PRINT RECIPES": GOSUB 200
  320. 4010  IF N <1  THEN  GOSUB 410: GOTO 30
  321. 4020  PRINT "WHAT PAGE NUMBER?  ";:NC = 3: GOSUB 150
  322. 4030  GOSUB 4500
  323. 4040  GOTO 30
  324. 4500 PN =  VAL(I$): IF PN = 0 GOTO 30
  325. 4510  IF PN >N  THEN  GOSUB 420: GOTO 30
  326. 4520  FOR X = 1 TO 16:WD$(X) = "": NEXT 
  327. 4530  IF TR%(PN) = 0  THEN  GOSUB 420: POP : GOTO 30
  328. 4540  HOME : PRINT "DO YOU WANT: ": POKE 32,4: PRINT : PRINT "1. RECIPE SIZE AS LISTED"
  329. 4550  PRINT "2. RECIPE DOUBLED": PRINT "3. RECIPE TRIPLED": PRINT "4. RECIPE CUT IN HALF": PRINT :UL = 4:PM$ = "WHICH?  "
  330. 4560  GOSUB 300:RS = CH: PRINT : POKE 32,0
  331. 4570  GOSUB 375: GOSUB 325
  332. 4580  GOSUB 700: GOSUB 800: GOSUB 850:C = 0
  333. 4590  IF RS = 1  THEN  GOTO 4610
  334. 4600  GOSUB 6000
  335. 4610  IF PR >0  THEN NR$(PN) =  CHR$(31) + CHR$(1) +NR$(PN) + CHR$(2) + CHR$(29)
  336. 4620 TL$ = NR$(PN):T1$ = "SERVES " + STR$(NS%): GOSUB 225
  337. 4630  FOR X = 1 TO NI%: PRINT X;") "; SPC( X <10);IG$(X): IF PR >0  THEN 4650
  338. 4640 C = C +1: IF C >14  THEN  GOSUB 355
  339. 4650  NEXT 
  340. 4660  IF PR >0  THEN  GOTO 4690
  341. 4670  IF C >11  THEN  GOSUB 355: GOTO 4700
  342. 4680  PRINT :C = C +1: GOTO 4700
  343. 4690  PRINT :TL$ = "PREPARATION INSTRUCTIONS": GOSUB 200
  344. 4700  IF PR = 0  THEN  PRINT  TAB( 8);"PREPARATION INSTRUCTIONS": PRINT :C = C +2
  345. 4710  IF PR >0  THEN 4760
  346. 4720  FOR X = 1 TO NW%: PRINT WD$(X)
  347. 4730 C = C +1: IF C >14  THEN  GOSUB 355
  348. 4740  NEXT 
  349. 4750  GOSUB 350: RETURN 
  350. 4760  FOR X = 1 TO NW%  STEP 2: PRINT WD$(X);" ";WD$(X +1): NEXT 
  351. 4770  IF PR >0  THEN  PRINT : PRINT : PRINT : PRINT : PRINT : PRINT : PRINT D$;"PR#0":PR = 0: RETURN 
  352. 5000  HOME : VTAB 11: HTAB 10: SPEED= 100
  353. 5010  CALL BL: PRINT "JAN LOVES NOREEN": CALL BL: SPEED= 255: CALL BL: END 
  354. 6000  IF RS >3  THEN NS% = NS%/2: GOTO 6020
  355. 6010 NS% = NS% *RS
  356. 6020  IF NS% <1  THEN NS% = 1
  357. 6030  FOR X = 1 TO NI%
  358. 6040 NN% = 1
  359. 6050 C$(1) =  LEFT$(IG$(X),1)
  360. 6060  IF  ASC(C$(1)) <49  OR  ASC(C$(1)) >57  THEN 6250: REM  1ST CHARACTER WAS NOT A NUMBER
  361. 6070 NN% = NN% +1
  362. 6080 C$(NN%) =  MID$ (IG$(X),NN%,1)
  363. 6090  IF C$(NN%) =  CHR$(32)  THEN NN% = NN% -1: GOTO 6120
  364. 6100 NN% = NN% +1
  365. 6110  GOTO 6080
  366. 6120  IF NN% = 1  THEN DE% = 1:NU% =  VAL(C$(1)): GOTO 6230
  367. 6130  IF NN% = 2  THEN DE% = 1:NU% =  VAL(C$(1) +C$(2)): GOTO 6230
  368. 6140  IF NN% = 3  AND C$(2) = "/"  THEN DE% =  VAL(C$(3)):NU% =  VAL(C$(1)): GOTO 6230
  369. 6145  IF NN% = 3  AND C$(2) < >"-"  THEN DE% = 1:NU% =  VAL(C$(1) +C$(2) +C$(3)): GOTO 6230
  370. 6150  IF NN% >3  THEN 6180
  371. 6160 DE% = 1:NU% =  VAL(C$(1)): GOSUB 6500
  372. 6170 T1$ = NM$:DE% = 1:NU% =  VAL(C$(3)): GOSUB 6500:NM$ = T1$ +"-" +NM$: GOTO 6240
  373. 6180 WN$ = "": FOR Y = 1 TO NN%: IF C$(Y) = "-"  THEN DH = Y
  374. 6190  NEXT 
  375. 6200  IF DH >NN%  THEN 6250
  376. 6210  FOR W = 1 TO DH -1:WN$ = WN$ +C$(W): NEXT 
  377. 6220 DE% =  VAL(C$(DH +3)):NU% =  VAL(C$(DH +1)) + VAL(WN$) *DE%
  378. 6230  GOSUB 6500
  379. 6240 IG$(X) = NM$ + RIGHT$(IG$(X), LEN(IG$(X)) -NN%)
  380. 6250  NEXT 
  381. 6260  RETURN 
  382. 6500 WN% = 0:TF$ = ""
  383. 6510  IF RS = 4  THEN DE% = DE% *2: GOTO 6530
  384. 6520 NU% = NU% *RS
  385. 6530  IF DE% < = NU%  THEN WN% =  INT(NU%/DE%):NU% = NU% -WN% *DE%
  386. 6540  IF NU% = 0  THEN NM$ =  STR$(WN%): GOTO 6590
  387. 6550 TF$ =  STR$(NU%) +"/" + STR$(DE%): FOR Y = 1 TO 13: IF TF$ = RE$(Y)  THEN TF$ = FA$(Y)
  388. 6560  NEXT 
  389. 6570  IF WN% = 0  THEN NM$ = TF$: GOTO 6590
  390. 6580 NM$ =  STR$(WN%) +"-" +TF$
  391. 6590  RETURN 
  392. 7000 ET =  PEEK(222):LN =  PEEK(218) + PEEK(219) *256: POKE 216,0
  393. 7010  IF ET = 0  OR ET >15  THEN 7180: REM  APPLESOFT ERROR
  394. 7020  IF ET < >6  THEN 7120
  395. 7030  PRINT : PRINT OP$;IX$;L$
  396. 7040  PRINT WR$;IX$;",R0"
  397. 7050  PRINT N: PRINT NX%
  398. 7060  PRINT CL$;IX$
  399. 7070  PRINT OP$;RO$;LO$
  400. 7080  PRINT WR$;RO$;",R0"
  401. 7090  PRINT 0
  402. 7100  PRINT CL$;RO$
  403. 7110 TR%(1) = 1: GOTO 9290
  404. 7120  IF ET < >9  THEN 7180
  405. 7130  CALL BL: CALL BL
  406. 7140  TEXT : HOME : VTAB 8: PRINT "THERE IS NO MORE ROOM ON THIS DISK!!"
  407. 7150  PRINT : PRINT "INITIALIZE A NEW DISK AND CONTINUE"
  408. 7160  PRINT "ADDING RECIPES"
  409. 7170  END 
  410. 7180  TEXT : HOME : VTAB 8: PRINT "ERROR NUMBER ";ET;" IN LINE ";LN
  411. 7190  IF ET = 0  OR ET >15  THEN  PRINT "SEE APPLESOFT MANUAL, PAGE 81": GOTO 7210
  412. 7200  PRINT "SEE DOS MANUAL, PAGE 115"
  413. 7210  END 
  414. 9000  HOME : VTAB 8: HTAB 13: PRINT "RECIPE BOX": PRINT : HTAB 11: PRINT "JL COSTENBADER": VTAB 23: PRINT "** COPYRIGHT 1982 BY MICROSPARC, INC **"
  415. 9010  DIM WD$(16),TR%(300),NR$(300),IG$(25),HD$(10),J$(80)
  416. 9020  DIM RD(16),RI(25),L%(23),LS(16)
  417. 9030  DIM C$(15),FA$(15),RE$(15)
  418. 9040 CS =  -958:BL =  -1054
  419. 9050 D$ =  CHR$(4):CL$ = D$ +"CLOSE":OP$ = D$ +"OPEN"
  420. 9060 IX$ = "INDEX.FILE.L60":RD$ = D$ +"READ":RF$ = "RECIPE.FILE"
  421. 9070 RO$ = "OPEN.RECORDS":LO$ = ",L5"
  422. 9080 WR$ = D$ +"WRITE"
  423. 9090 LF$ = ",L45":L$ = ",L60"
  424. 9100 N = 0:PP% = 1:PI% = 1:NH = 9:NX% = 1
  425. 9110 DT$ = "................................................"
  426. 9120  ONERR  GOTO 7000
  427. 9130  DATA  APPETIZERS/PICKLES/RELISH,SOUPS/SALADS/SAUCES/DRESSINGS,MAIN DISHES (MEAT/FISH/POULTRY),MAIN DISHES (DAIRY/CASSEROLES)
  428. 9140  DATA  VEGETABLES,BREAD/ROLLS/PIES/COOKIES,DESSERTS,JELLY/JAM/PRESERVES,BEVERAGES
  429. 9150  FOR X = 1 TO NH: READ HD$(X): NEXT 
  430. 9160  DATA  162,0,32,117,253,160,2,138,145,105,200,169,0,145,105,200,169,2,145,105,189,0,2,41,127,157,0,2,202,224,255,208,243,96
  431. 9170  FOR J = 800 TO 833: READ I: POKE J,I: NEXT 
  432. 9180  DATA  2/8,4/8,6/8,2/4,2/6,4/6,2/16,4/16,6/16,8/16,10/16,12/16,14/16
  433. 9190  DATA  1/4,1/2,3/4,1/2,1/3,2/3,1/8,1/4,3/8,1/2,5/8,3/4,7/8
  434. 9200  FOR X = 1 TO 13: READ RE$(X): NEXT 
  435. 9210  FOR X = 1 TO 13: READ FA$(X): NEXT 
  436. 9220  PRINT D$;"RENAME";IX$;",";IX$: PRINT 
  437. 9230  PRINT OP$;IX$;L$
  438. 9240  PRINT RD$;IX$;",R0"
  439. 9250  INPUT N: INPUT NX%
  440. 9260  IF N = 0  THEN  GOTO 9280
  441. 9270  FOR X = 1 TO N: PRINT RD$;IX$;",R";X: INPUT TR%(X): CALL 800:NR$(X) =  MID$ (CV$,1): NEXT 
  442. 9280  PRINT CL$;IX$
  443. 9290 X =  PEEK(37): REM  SET ADDRESSES FOR SCREEN LINES
  444. 9300  FOR I = 0 TO 23: POKE 37,I: CALL  -990
  445. 9310 L%(I) = 256 *( PEEK(41)) + PEEK(40): NEXT 
  446. 9320  POKE 37,X: CALL  -990: GOTO 30